<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
     <div id="app">
        <parent></parent>
     </div>
     
     <!-- 父组件结构 -->
     <template id="parent">
         <fieldset>
            <legend>父组件</legend>
            <input type="text" v-model="val">
            <child :a="val" @send="send"></child>
         </fieldset>
     </template>
     <!-- 子组件结构 -->
     <template id="child">
        <fieldset>
           <legend>子组件</legend>
           <button @click="add">add</button>
           <ul>
              <li v-for="(item,index) of arr" :key="index">
                 {{item}}
              </li>
           </ul>
        </fieldset>
    </template>
    <script src='https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js'></script>
    <script>
        //父组件传递给子组件使用props
        //步骤:
        //1、找到子组件的标签、使用v-bind动态绑定一个属性a,
        //2、子组件通过props来接受
        //3、子组件如果存在父组件相同的属性会法发生冲突
        //4、props是只读属性不要改

        //清除父组件的内容
        //子组件向父组件传值的流程
        //使用vue的事件机制
        //$emit(发送的意思)
        //1、找到子组件的标签，@自定义绑定的事件，事件处理函数写到父组件的选项接受形参
        //子组件中通过主动触发自定义事件的方式 进行参数的传递或者通信
        

        //兄弟之间怎么通信
        //bus总线
         Vue.component('parent',{
            template:"#parent",
            data(){
                return{
                   val:""
                }
            },
            methods:{
                //自定义事件处理函数
                send(input){
                    this.val="";
                    console.log(input);
                }
            },
            components:{
                "child":{
                  template:"#child",
                  //可以当data使用
                  props:["a"],
                  methods:{
                    add(){
                        this.arr.push(this.a);
                        //触发自定义事件
                        this.$emit("send",this.a)
                    }
                  },
                  data(){
                    return{
                        arr:["唱","跳","rap"]
                    }
                  }
                }
            },
         })
        const vm = new Vue({
            el:"#app",
            data:{},
            methods:{

            }
        })
    </script>
</body>
</html>